package dao;
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.Vector;  
  
import javax.swing.JOptionPane;  
  
import modelo.dominio.Cliente;

import dao.banco.ConFactory;  
  
public class DaoCliente {  
   // Configura essas variáveis de acordo com o seu banco  
   private final String URL = "jdbc:mysql://localhost/bd_locarrao",  
         NOME = "root", SENHA = "locarrao2";  
  
   private Connection con;  
   private Statement comando;  
   
   public boolean tabelaBDehVazia(){
       conectar();  
      Vector<Cliente> resultados = new Vector<Cliente>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_cliente");  
         while (rs.next()) {  
            Cliente temp = new Cliente();  
            // pega todos os atributos da pessoa 
            temp.setCpf(rs.getString("cpf"));
            resultados.add(temp);  
            break;
         }  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar cliente", e.getMessage());  
      }
      return (resultados.isEmpty());
   }
   public void apagar(String cpf) {  
      conectar();  
      try {  
         comando.executeUpdate("DELETE FROM pessoa WHERE cpf = '" + cpf  
                     + "';");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao apagar pessoas", e.getMessage());  
      } finally {  
         fechar();  
      }  
   }  
  
   public Vector<Cliente> buscarTodos() {  
      conectar();  
      Vector<Cliente> resultados = new Vector<Cliente>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM pessoa");  
         while (rs.next()) {  
            Cliente temp = new Cliente();  
            // pega todos os atributos da pessoa 
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setTelefone(rs.getString("telefone"));
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar pessoas", e.getMessage());  
         return null;  
      }  
   }  
  
   public void atualizar(Cliente pessoa) {  
      conectar();  
      String com = "UPDATE pessoa SET nome = '" + pessoa.getNome()  
            + "', telefone ='" + pessoa.getTelefone()  
            + "' WHERE  rg = '" + pessoa.getCpf() + "';";  
      System.out.println("Atualizada!");  
      try {  
         comando.executeUpdate(com);  
      } catch (SQLException e) {  
         e.printStackTrace();  
      } finally {  
         fechar();  
      }  
   }  
  
   public Vector<Cliente> buscar(String cpf) {  
      conectar();  
      Vector<Cliente> resultados = new Vector<Cliente>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM pessoa WHERE cpf LIKE '"  
               + cpf + "%';");  
         while (rs.next()) {  
            Cliente temp = new Cliente();  
            // pega todos os atributos da pessoa  
            temp.setCpf(rs.getString("cpf"));  
            temp.setNome(rs.getString("nome"));  
            temp.setTelefone(rs.getString("telefone"));  
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar pessoa", e.getMessage());  
         return null;  
      }  
  
   }  
   
    public Cliente buscarClientePorCodigo(int cod) {  
      conectar();  
      Cliente c = new Cliente();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM cliente WHERE cod_cliente LIKE '"  
               + cod + "%';");  
         while (rs.next()) {    
            // pega todos os atributos da pessoa  
            c.setCpf(rs.getString("cpf"));  
            c.setCodCliente(rs.getInt("cod_cliente"));  
            
              
         }  
         return c;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar pessoa", e.getMessage());  
         return null;  
      }  
  
   }  
  
   public void insere(Cliente cliente){  
      conectar();  
      try {    
         comando.executeUpdate("INSERT INTO `bd_locarrao`.`tb_cliente` (`cpf`) VALUES ('" + cliente.getCpf() + "')");
         System.out.println("Inserida!");
      } catch (SQLException e) {  
         imprimeErro("Erro ao inserir ", e.getMessage());  
      } finally {  
         fechar();
      }  
   }  
   public int retornaCodUltimoRegistro(){
       conectar();
       int resultado=0;
       ResultSet rs;
       try {
           
       rs = comando.executeQuery("SELECT Max(cod_cliente) FROM bd_locarrao.tb_cliente;"); 
       while(rs.next() ){
             resultado = rs.getInt("Max(cod_cliente)");
       }
       return(resultado);
       } catch (SQLException e) {  
         imprimeErro("Erro ao buscar cod_cliente", e.getMessage());  
         return (0);
      }  

   }  
   private void conectar() {  
      try {  
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);  
         comando = con.createStatement();  
         System.out.println("Conectado!");  
      } catch (ClassNotFoundException e) {  
         imprimeErro("Erro ao carregar o driver", e.getMessage());  
      } catch (SQLException e) {  
         imprimeErro("Erro ao conectar", e.getMessage());  
      }  
   }  
  
   private void fechar() {  
      try {  
         comando.close();  
         con.close();  
         System.out.println("Conexão Fechada");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao fechar conexão", e.getMessage());  
      }  
   }  
  
   private void imprimeErro(String msg, String msgErro) {  
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
      System.err.println(msg);  
      System.out.println(msgErro);  
      System.exit(0);  
   }  
}  